package me.yangzhi.day_12;

import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import me.yangzhi.day_12.adapter.ChatAdapter;
import me.yangzhi.day_12.db.ChatDBHelper;
import me.yangzhi.day_12.model.ChatMessage;

/**
 * 主界面Activity，负责聊天页面的显示和交互逻辑
 * 包括消息的发送、接收、删除，以及与数据库的交互
 */
public class MainActivity extends AppCompatActivity implements ChatAdapter.OnMessageLongClickListener {
    // 聊天数据库帮助类，用于操作SQLite数据库
    private ChatDBHelper dbHelper;
    // 聊天消息适配器，用于RecyclerView显示消息
    private ChatAdapter adapter;
    // 输入框控件
    private EditText editTextMessage;
    // Handler用于主线程延时操作（如自动回复）
    private Handler handler;
    // 聊天消息列表控件
    private RecyclerView recyclerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 启用EdgeToEdge，适配全面屏
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);

        // 初始化数据库帮助类
        dbHelper = new ChatDBHelper(this);
        // 初始化主线程Handler
        handler = new Handler(Looper.getMainLooper());

        // 绑定视图控件
        recyclerView = findViewById(R.id.recyclerView);
        editTextMessage = findViewById(R.id.editTextMessage);

        // 设置RecyclerView的布局管理器和适配器
        adapter = new ChatAdapter(this); // this实现了长按回调接口
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setAdapter(adapter);

        // 加载历史消息到界面
        loadMessages();

        // 设置发送按钮点击事件，点击后调用sendMessage方法
        findViewById(R.id.buttonSend).setOnClickListener(v -> sendMessage());

        // 设置系统栏边距，保证内容不被状态栏/导航栏遮挡
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });
    }

    /**
     * 加载所有历史消息到RecyclerView
     * 从数据库读取所有消息并显示
     */
    private void loadMessages() {
        adapter.setMessages(dbHelper.getAllMessages());
        // 滚动到最后一条消息
        recyclerView.scrollToPosition(adapter.getItemCount() - 1);
    }

    /**
     * 发送消息的逻辑
     * 1. 获取输入框内容
     * 2. 保存到数据库
     * 3. 刷新界面
     * 4. 2秒后自动回复一条消息
     */
    private void sendMessage() {
        String messageText = editTextMessage.getText().toString().trim();
        if (!messageText.isEmpty()) {
            // 1. 保存发送的消息到数据库（isSent=true）
            long messageId = dbHelper.addMessage(messageText, true);
            ChatMessage sentMessage = new ChatMessage(messageId, messageText, true, System.currentTimeMillis());
            // 2. 添加到适配器并刷新界面
            adapter.addMessage(sentMessage);
            editTextMessage.setText(""); // 清空输入框
            recyclerView.scrollToPosition(adapter.getItemCount() - 1);

            // 3. 2秒后自动回复一条消息（模拟对方回复）
            handler.postDelayed(() -> {
                String replyText = "收到你的消息：" + messageText;
                long replyId = dbHelper.addMessage(replyText, false);
                ChatMessage replyMessage = new ChatMessage(replyId, replyText, false, System.currentTimeMillis());
                adapter.addMessage(replyMessage);
                recyclerView.scrollToPosition(adapter.getItemCount() - 1);
            }, 2000);
        }
    }

    /**
     * 处理消息长按事件（删除消息）
     * 弹出确认对话框，确认后从数据库和界面删除
     * @param message 被长按的消息对象
     */
    @Override
    public void onMessageLongClick(ChatMessage message) {
        new AlertDialog.Builder(this)
                .setTitle("删除消息")
                .setMessage("确定要删除这条消息吗？")
                .setPositiveButton("确定", (dialog, which) -> {
                    // 从数据库删除
                    if (dbHelper.deleteMessage(message.getId())) {
                        // 从适配器删除并刷新界面
                        adapter.removeMessage(message);
                        Toast.makeText(this, "消息已删除", Toast.LENGTH_SHORT).show();
                    }
                })
                .setNegativeButton("取消", null)
                .show();
    }

    /**
     * Activity销毁时关闭数据库，防止内存泄漏
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (dbHelper != null) {
            dbHelper.close();
        }
    }
}